
# https://www.liaoxuefeng.com/wiki/1016959663602400/1115615597164000
# https://www.cnblogs.com/pyspark/articles/8819803.html
# https://blog.csdn.net/cpxsxn/article/details/108983545

# with open('/path/to/file', 'r') as f:
#     f.read()
# 并不是只有open()函数返回的fp对象才能使用with语句。实际上，任何对象，只要正确实现了上下文管理，就可以用于with语句。

# 实现上下文管理是通过__enter__和__exit__这两个方法实现的。例如，下面的class实现了这两个方法：
#
# class Query(object):
#
#     def __init__(self, name):
#         self.name = name
#
#     def __enter__(self):
#         print('Begin')
#         return self
#
#     def __exit__(self, exc_type, exc_value, traceback):
#         if exc_type:
#             print('Error')
#         else:
#             print('End')
#
#     def query(self):
#         print('Query info about %s...' % self.name)
#
#
# 这样我们就可以把自己写的资源对象用于with语句：
#
# with Query('Bob') as q:
#     q.query()